package com.castle.fortress.admin.flowable.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.flowable.dto.FlowableTemplateDto;
import com.castle.fortress.admin.flowable.entity.FlowableTemplateEntity;
import com.castle.fortress.common.entity.RespBody;

import java.util.List;

/**
 * 流程模板管理表 服务类
 *
 * @author castle
 * @since 2022-09-26
 */
public interface FlowableTemplateService extends IService<FlowableTemplateEntity> {

    /**
     * 分页展示流程模板管理表列表
     * @param page
     * @param flowableTemplateDto
     * @return
     */
    IPage<FlowableTemplateDto> pageFlowableTemplate(Page<FlowableTemplateDto> page, FlowableTemplateDto flowableTemplateDto);


    /**
     * 展示流程模板管理表列表
     * @param flowableTemplateDto
     * @return
     */
    List<FlowableTemplateDto> listFlowableTemplate(FlowableTemplateDto flowableTemplateDto);

    /**
     * 扩展详情
     * @param id
     * @return
     */
    FlowableTemplateDto getByIdExtends(Long id);

    /**
     * 异步更新xml数据
     * @param flowableTemplateEntity
     */
    void updateXmlData(FlowableTemplateEntity flowableTemplateEntity);

    /**
     * 已部署未绑定的流程
     * @return
     */
    List<FlowableTemplateDto> unbindFlowableTemplate();

    /**
     * 删除流程相关
     * @param id
     * @return
     */
    boolean delById(Long id);

    /**
     * 删除应用对应的流程
     * @param ids
     * @return
     */
    boolean delByAppIds(List<Long> ids);

    /**
     * 校验是否被应用绑定
     * @param id
     * @return
     */
    boolean isBind(Long id);

    /**
     * 初始化一个随机的流程key
     * @return
     */
    String initActKey();

    List<FlowableTemplateDto> listFlowableTemplateIgnoreDel(FlowableTemplateDto temp);

    FlowableTemplateEntity getByIdIgnoreDel(String fid);
}
